package collection02;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
在使用迭代器遍历集合中容易引发的问题：
    需求：定义一个集合，向集合中添加三个字符串：”abc“ ，”def“，”ghk“
    当遍历到”ghk”的时候，删除该元素
    java.util.ConcurrentModificationException：并发修改异常
       由于我们在使用迭代器的方法遍历的过程中，使用了集合的删除/添加 方法，导致并发修改异常
       解决：
          在使用迭代器遍历的过程中，如果需要增加/删元素，使用迭代器的方法来完成，就可以避免这个错误
          void remove()
          从迭代器指向的 collection 中移除迭代器返回的最后一个元素（可选操作）。
 */
public class CollectionDemo02 {
    public static void main(String[] args) {
        //method01();

        Collection c = new ArrayList();
        c.add("abc");
        c.add("def");
        c.add("ghk");
        //1.获取一个迭代器对象
        Iterator iterator = c.iterator();
        //2.利用迭代器的判断和获取功能
        while (iterator.hasNext()) {
            Object ele = iterator.next();
            if (ele.equals("ghk")) {
                //c.remove(ele);
                iterator.remove();//删除当前迭代器遍历的元素，不用传参
                                  //[abc, def]
            }
        }
        //3.打印集合
        System.out.println(c);
    }

    //会引发并发修改异常
    private static void method01() {
        Collection c = new ArrayList();
        c.add("abc");
        c.add("def");
        c.add("ghk");
        //1.获取一个迭代器对象
        Iterator iterator = c.iterator();
        //2.利用迭代器的判断和获取功能
        while (iterator.hasNext()) {
            Object ele = iterator.next();
            if (ele.equals("ghk")) {
                c.remove(ele);
            }
        }
        //3.打印集合
        System.out.println(c);
    }
}
